package demo3;

import java.security.Key;

/**
 * 适配器：实现目标接口，内部组合新组件，完成接口适配
 */
public class CryptoAdapter implements CryptoTarget {
    // 组合适配者（新组件）
    private final NewCryptoLibrary newCryptoLibrary = new NewCryptoLibrary();

    @Override
    public String encryptOld(String plainText, String key) {
        try {
            // 适配逻辑：1. 字符串密钥转Key对象（新组件需要）；2. 调用新组件加密；3. 返回与旧接口一致的字符串格式
            Key desKey = newCryptoLibrary.generateKey(key);
            return newCryptoLibrary.desEncrypt(plainText, desKey);
        } catch (Exception e) {
            throw new RuntimeException("加密失败：" + e.getMessage());
        }
    }

    @Override
    public String decryptOld(String cipherText, String key) {
        try {
            // 适配逻辑：与加密对应，完成新组件解密的调用适配
            Key desKey = newCryptoLibrary.generateKey(key);
            return newCryptoLibrary.desDecrypt(cipherText, desKey);
        } catch (Exception e) {
            throw new RuntimeException("解密失败：" + e.getMessage());
        }
    }
}
